www.gusucode.com > 基于matlab编程空间复用空时码的仿真程序源码 > 基于matlab编程空间复用空时码的仿真程序源码/2Tx,2Rx,Spatial Multiplex/chanSUI_corr_2x2.m
function chanSUI_corr_2x2(chanparams) % SUI channel simulation with 2X2 antenna configuration % chanparams.chantype -- SUI channel type % chanparams.cohtime -- expanding length(number of sampling points per OFDM frame) % chanparams.tx1_infile -- input data from Tx Antenna 1 % chanparams.tx2_infile -- input data from Tx Antenna 2 % chanparams.rx1_outfile -- channel output data at Rx Antenna 1 % chanparams.rx2_outfile -- channel output data at Rx Antenna 2 % chanparams.sampletime -- sample interval in time domain(1/Fs) % chanparams.numframe -- Number of frames switch chanparams.chantype, case 1, % SUI-1 Channel tau = [0 0.4 0.9]; % tap delay in us load paths_sui1_11.mat; load paths_sui1_21.mat; load paths_sui1_12.mat; load paths_sui1_22.mat; case 2, % SUI-2 Channel tau = [0 0.4 1.1]; load paths_sui2_11.mat; load paths_sui2_21.mat; load paths_sui2_12.mat; load paths_sui2_22.mat; case 3, % SUI-3 Channel tau = [0.0 0.4 0.9]; load paths_sui3_11.mat; load paths_sui3_21.mat; load paths_sui3_12.mat; load paths_sui3_22.mat; case 4, % SUI-4 Channel tau = [0 1.5 4]; load paths_sui4_11.mat; load paths_sui4_21.mat; load paths_sui4_12.mat; load paths_sui4_22.mat; case 5, % SUI-5 Channel tau = [0 4 10]; load paths_sui5_11.mat; load paths_sui5_21.mat; load paths_sui5_12.mat; load paths_sui5_22.mat; case 6, % SUI-6 Channel tau = [0 14 20]; load paths_sui6_11.mat; load paths_sui6_21.mat; load paths_sui6_12.mat; load paths_sui6_22.mat; otherwise, error('Unrecognized channel model'); end %-----------Read frame modulation data out-------- %-----------Note: frame modulation data are same in each frame.------------- chanipfid_tx1 = fopen(chanparams.tx1_infile, 'r'); % open channel input from Tx Antenna 1 file if chanipfid_tx1 <= 0 error('unable to open Tx 1 channel input file'); end [ChanInData_tx1, datalen] = fread(chanipfid_tx1, 2*chanparams.cohtime, 'float32'); if datalen~=2*chanparams.cohtime, error('fread Tx 1 channel input data error!'); end ChanInData_tx1 = [ 1 1j ] * reshape(ChanInData_tx1, 2, datalen/2); Len = datalen/2; fclose(chanipfid_tx1); chanipfid_tx2 = fopen(chanparams.tx2_infile, 'r'); % open channel input from Tx Antenna 2 file if chanipfid_tx2 <= 0 error('unable to open Tx 2 channel input file'); end [ChanInData_tx2, datalen] = fread(chanipfid_tx2, 2*chanparams.cohtime, 'float32'); if datalen~=2*chanparams.cohtime, frm,error('fread Tx 2 channel input data error!'); end ChanInData_tx2 = [ 1 1j ] * reshape(ChanInData_tx2, 2, datalen/2); Len = datalen/2; fclose(chanipfid_tx2); %--------------------------------------------------------------------------- % Multipath process Delay = round(tau/(chanparams.sampletime)); % multipath delay in sample points % ########### Rx 1 Operation ########## PrevFrame_tx1 = zeros(1,max(Delay)); % multipath delay part from previous frame PrevFrame_tx2 = zeros(1,max(Delay)); chanopfid_rx1 = fopen(chanparams.rx1_outfile, 'w'); % open channel output to Rx Antenna 1 file if chanopfid_rx1 < 0 error('unable to open Rx 1 channel output file'); end for frm = 1:chanparams.numframe % let each frame pass through the channel % Tx 1 data through channel 11 OutData_tx1 = zeros(1, Len); for p=1:3 pathData_tx1 = [PrevFrame_tx1(end+1-Delay(p):end) ChanInData_tx1(1:end-Delay(p))]; OutData_tx1 = OutData_tx1+pathData_tx1*paths_11(p,frm); end PrevFrame_tx1 = ChanInData_tx1(end+1-max(Delay):end); % Not accurate! Just for convenience! % Tx 2 data through channel 21 OutData_tx2 = zeros(1, Len); for p=1:3 pathData_tx2 = [PrevFrame_tx2(end+1-Delay(p):end) ChanInData_tx2(1:end-Delay(p))]; OutData_tx2 = OutData_tx2+pathData_tx2*paths_21(p,frm); end PrevFrame_tx2 = ChanInData_tx2(end+1-max(Delay):end); % Not accurate! Just for convenience! % Superposition OutData = OutData_tx1+OutData_tx2; % write each frame into file fwrite(chanopfid_rx1, [real(OutData);imag(OutData)], 'float32'); end % ########### Rx 2 Operation ########## PrevFrame_tx1 = zeros(1,max(Delay)); % multipath delay part from previous frame PrevFrame_tx2 = zeros(1,max(Delay)); chanopfid_rx2 = fopen(chanparams.rx2_outfile, 'w'); % open channel output to Rx Antenna 1 file if chanopfid_rx2 < 0 error('unable to open Rx 2 channel output file'); end for frm = 1:chanparams.numframe % let each frame pass through the channel % Tx 1 data through channel 11 OutData_tx1 = zeros(1, Len); for p=1:3 pathData_tx1 = [PrevFrame_tx1(end+1-Delay(p):end) ChanInData_tx1(1:end-Delay(p))]; OutData_tx1 = OutData_tx1+pathData_tx1*paths_12(p,frm); end PrevFrame_tx1 = ChanInData_tx1(end+1-max(Delay):end); % Not accurate! Just for convenience! % Tx 2 data through channel 21 OutData_tx2 = zeros(1, Len); for p=1:3 pathData_tx2 = [PrevFrame_tx2(end+1-Delay(p):end) ChanInData_tx2(1:end-Delay(p))]; OutData_tx2 = OutData_tx2+pathData_tx2*paths_22(p,frm); end PrevFrame_tx2 = ChanInData_tx2(end+1-max(Delay):end); % Not accurate! Just for convenience! % Superposition OutData = OutData_tx1+OutData_tx2; % write each frame into file fwrite(chanopfid_rx2, [real(OutData);imag(OutData)], 'float32'); end fclose(chanopfid_rx1); fclose(chanopfid_rx2);